package com.dbms.parser.ast;

import com.dbms.common.Position;

/**
 * StatementNode (语句节点) 是所有 SQL 语句的抽象语法树 (AST) 节点的抽象基类。
 * 无论是 `CREATE TABLE`, `INSERT`, `SELECT`还是`DELETE`，它们的 AST 节点都继承自这个类。
 * 它提供了一个所有语句节点都共有的属性：在源代码中的位置。
 */
public abstract class StatementNode {
    /**
     * 该 SQL 语句在原始查询字符串中的位置信息（行号和列号）。
     * 这对于在发生错误时向用户报告准确的错误位置非常有用。
     */
    private final Position position;

    public StatementNode(Position position) {
        this.position = position;
    }

    /**
     * 获取语句的位置信息。
     * @return 位置对象 (Position)
     */
    public Position getPosition() {
        return position;
    }

    /**
     * 这是一个抽象方法，要求所有具体的语句节点（如 CreateTableNode, SelectNode）
     * 都必须实现它，以返回一个标识自己类型的字符串。
     * 这使得在处理 AST 时，可以通过调用此方法来轻松地区分不同类型的 SQL 语句。
     *
     * @return 语句类型的字符串标识 (例如, "CREATE_TABLE", "INSERT", "SELECT", "DELETE")
     */
    public abstract String getStatementType();
}